iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0

21 - Draper

上篇 Design Pattern(1) - Decorator 簡單的介紹了自己生一個 decorator,不過可以發現東西會經過 helper,相對於來說個人不太喜歡,又或者是原本沒有使用 decorator 將邏輯直接放在 helper 內,且 full_name 方法是沒有任何 namespace 在 controller 與 view 之中。

  # app/helpers/users_helper.rb
  def full_name
    "#{first_name} #{last_name}"
  end

gem install

  # Gemfile
  gem "draper"

Writing Decorators

建立對應的 Decorator,並指要呼叫 decorate 方法就可以使用裡面的方法。

  # app/controllers/user_controller.rb
  class UsersController < ApplicationController
    def show
      @user = User.find(params[:id])
      @user_decorator = @user.decorate
    end
  end
  # app/decorators/user_decorator.rb
  class UserDecorator < Draper::Decorator
    def full_name
      "#{first_name} #{last_name}"
    end
  end

View

  # show.html.erb
  <%= @user_decorator.full_name %>

其實整體東西與上一篇的概念是差不多的,不過 draper 做到更多意想不到的事情,詳細也可以參考文件。

參考資料

My blog


上一篇
冒險村20 - Design Pattern(1) - Decorator
下一篇
冒險村22 - Design Pattern(2) - Presenter
系列文
冒險村-30 Day Ruby on Rails Tips Challenge30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言